package com.study.utils;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;


import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;

/**
 * 对目标文件夹进行压缩，再下载zip文件到本地，最后解压
 */
public class HttpDownload  {
	public void receiveFilename() {
		Date d = new Date();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		String taday = df.format(d).toString();
		// 可将文件路径进行文件配置，然后读取配置文件进行文件的下载
		String filePath1 = "fhb";
		String filePath2 = "zzb";

		// 下载zip文件到本地
		downloadFile(filePath1);
		downloadFile(filePath2);

		// 解压zip文件
		unZip("E:/" + filePath1 + ".zip");
		unZip("E:/" + filePath2 + ".zip");

		// 删除zip文件
//		deleteFile("E:/" + filePath1 + ".zip");
//		deleteFile("E:/" + filePath2 + ".zip");
	}

	public boolean downloadFile(String filePath) {
		Boolean flag = false;
		try {
			// 创建httpClient对象
			HttpClient httpClient = new HttpClient();
			// 创建getMethod对象
			GetMethod getMethod = new GetMethod("http://10.192.188.104:8090/nhzxs/down/downLoad?filePath=" + filePath);
			// 封装参数
			// getMethod.setRequestHeader("voiceName", URLEncoder.encode(filename,"UTF-8"));
			// 发送请求
			httpClient.executeMethod(getMethod);
			// 创建接收文件的流
			File file = new File("E:/" + filePath + ".zip");
			OutputStream outputStream = new FileOutputStream(file);
			// 将responseBody截取并写入到指定文件路径下
			outputStream.write(getMethod.getResponseBody());
			outputStream.flush();
			outputStream.close();
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
			flag = false;
		}
		return flag;
	}

	private static final int buffer = 2048;

	/**
	 * 解压Zip文件
	 * 
	 * @param path
	 *            文件目录
	 */
	public static void unZip(String path) {
		int count = -1;
		String savepath = "";

		File file = null;
		InputStream is = null;
		FileOutputStream fos = null;
		BufferedOutputStream bos = null;

		savepath = path.substring(0, path.lastIndexOf(".")) + File.separator; // 保存解压文件目录
		new File(savepath).mkdir(); // 创建保存目录
		ZipFile zipFile = null;
		try {
			zipFile = new ZipFile(path); // 解决中文乱码问题
			Enumeration<?> entries = zipFile.entries();

			while (entries.hasMoreElements()) {
				byte buf[] = new byte[buffer];

				ZipEntry entry = (ZipEntry) entries.nextElement();

				String filename = entry.getName();
				boolean ismkdir = false;
				if (filename.lastIndexOf("/") != -1) { // 检查此文件是否带有文件夹
					ismkdir = true;
				}
				filename = savepath + filename;

				if (entry.isDirectory()) { // 如果是文件夹先创建
					file = new File(filename);
					file.mkdirs();
					continue;
				}
				file = new File(filename);
				if (!file.exists()) { // 如果是目录先创建
					if (ismkdir) {
						new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); // 目录先创建
					}
				}
				file.createNewFile(); // 创建文件

				is = zipFile.getInputStream(entry);
				fos = new FileOutputStream(file);
				bos = new BufferedOutputStream(fos, buffer);

				while ((count = is.read(buf)) > -1) {
					bos.write(buf, 0, count);
				}
				bos.flush();
				bos.close();
				fos.close();

				is.close();
			}

			zipFile.close();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (bos != null) {
					bos.close();
				}
				if (fos != null) {
					fos.close();
				}
				if (is != null) {
					is.close();
				}
				if (zipFile != null) {
					zipFile.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	public void deleteFile(String filePath) {
		File file = new File(filePath);
		if (file.exists() && file.isFile())
			file.delete();
	}
}
